奇硕基于网易云的微服务与大数据实战
5月24日,在网易和中睿协办的“云服务、大数据应用实例&高效研发管理---软件研发沙龙”中,作为网易云的典型客户,上海奇硕网络科技有限公司CTO殷世林分享了奇硕在大数据平台建设方面的核心技术,以及基于网易云实现微服务化改造和数据平台升级的经验。
奇硕产品与服务
上海奇硕网络科技有限公司成立于2014年4月,是一家专注于鞋服零售并为泛零售行业提供大数据服务与一体化解决方案的大数据科技公司。奇硕的业务方向包括三块:
流量、业务诊断服务,对应的产品是零售魔方。通过自研的智能硬件抓取客流数据,结合大数据平台,对流量数据进行分析,再加上客户的零售数据,对客户进行可视化的数据服务,最终给客户提供业绩诊断报告。这些指标看似简单,但是全方位反应了零售行业日常的经营情况:
数据营销服务,对应的产品是数据营销平台,通过抓取的流量数据,对客户设定标签,分析消费行为,使客户能够据此优化产品结构,做到精准营销;
企业数据总线服务,对应的产品是企业数据中心,为没有能力建设大数据平台的企业提供数据平台服务,帮助企业分析数据,挖掘价值。
技术与平台
奇硕的核心技术如下所示:
首先,奇硕拥有自研的智能硬件,通过这个智能硬件抓取流量数据,并通过数据分析的算法进行建模,除此之外奇硕还拥有资深零售行业的数据团队,他们的行业经验能够帮助公司更加准确的刻画行业级用户画像。
上图是奇硕大数据平台的总体架构:
数据源是采集数据的智能硬件设备以及企业的运营数据;
通过数据的采集和抽取,在平台上进行整合,这就是数据采集层;
采集和整合的数据,会放入数据存储层进行存储,可保存在HDFS,Hbase以及对象存储中;
在数据计算层,离线分析采取Hadoop的Map-Reduce进行处理,实时处理当前使用Storm,后期会改用Spark Streaming进行处理,数据挖掘使用的是Spark的Machine Learning库中的算法;
处理完毕后的结果,一部分存储在Mysql,一部分存储在HBase中;
在产品层,通过对大数据平台中数据的读取和整合,在产品层进行展现。
这里是基于数据平台的数据处理中心的架构,通过数据采集和数据整合,将流量数据、交易数据、库存数据、销售数据进行统一的处理。
通过ETL,将企业的数据抽取过来,对数据进行清洗,再根据业务专家的建议构造数据模型,根据数据的专题构建数据集市,最后通过OLAP工具进行数据分析。在这里奇硕可以对客户数据进行多维度的分析,可视化的图表。另外,在营销平台上,奇硕通过Spark对流量数据和营销数据,根据业务规则进行挖掘和模式的匹配,给零售企业提供数据的精准营销。
基于网易云的应用实践
奇硕在今年迁移到网易云的过程中,对整个体系架构和数据平台进行了升级,这些升级主要包括数据平台的升级,企业数据中心的升级和应用系统架构的升级。
1
数据平台升级
其中,数据平台的升级涉及到以下几个方面:
安全性方面:原来的架构使用的全部是带公网网卡的云主机,服务经常受到外网的网络攻击,差点造成数据的丢失。基于网易云的部署过程中,奇硕调整了架构,屏蔽了外网访问,横向流量全部通过内网,运维操作通过VPN的方式进行;
高可用性方面:原来的架构部署在多台大规格的云主机上,每一台云主机部署了多个服务,高可用性存在问题。迁移至网易云的时候,通过将部分应用部署在容器中,通过对关键系统的多副本互备和负载均衡,实现服务的高可用;
易维护性方面:原来的架构中所有的应用都是自己搭建的,例如数据库,缓存等,技术人力比较紧张,需要花费大量的运维成本。使用了网易云的RDS和Redis集群服务后,高可用、自维护、迁移等都由网易云的PaaS服务承担;
合理性方面:原来的架构中,一台云主机上部署了多个系统,隔离性不好,也没有实现按需分配,这样资源的分配不太均匀,出现繁忙的服务竞争资源,部分主机资源空闲的情况。基于网易云的按需分配机制,将大的应用部署在高规格的云主机上,将小的应用部署在容器上;
易扩展性方面:基于容器技术,部分节点可以水平扩展。
上图是升级过后的大数据平台的部署架构,将平台分外网和内网,通过负载均衡隔离。通过代理Nginx将外网请求转发到内网,在Nginx中配置灵活的规则,将不同的请求转发到不同的服务中。Nginx是部署在无状态容器上的,容器挂掉后可以自我修复。数据采集层使用的Flume,收集的数据分成两部分,一部分存储到HDFS里面,一部分发送到Kafka,被实时运算Storm进行处理。离线计算使用的是Map-Reduce,数据挖掘使用Spark。计算的结果主要放在Mysql里面,需要高并发访问的,会缓存在网易云的缓存服务Redis中。整个大数据平台全部基于容器和云主机。
2
企业数据中心升级
奇硕的数据中心也经过了一次升级:之前的数据中心,主要是基于客户的DB数据库,在加上一些传统的BI分析工具,做一定的可视化分析。随着客户的数据量越来越大,原来的很多数据都整合到了大数据平台里面。
奇硕使用Kettle将企业数据从数据库中抽取出来,存储在大数据平台,在线分析工具使用了Kylin系统,将数据分析的结果写到HBase里面,然后通过可视化系统展现出来。
随着业务的发展,奇硕系统承载的数据量也越来越大,现在的数据量在10G/天左右,预计年底会达1T/天左右,自己搭建数据平台的话,运维成本太高了,正在计划和将数据平台迁移到网易猛犸,并和网易有数进行整合。
3
应用系统架构升级
奇硕在应用架构方面也进行了升级。最初系统出于快速上线的需求,系统的架构设计不是特别合理,采用了单体架构的模式,随着业务量和系统功能的增多,开始对系统进行微服务架构的改造。
上图是改造后的应用架构,把原来的系统按照业务规则拆分为相互不关联的服务,比如品牌服务、客流服务、画像服务和微信服务,在服务外面通过服务路由,将服务进行对外发布,在产品层根据产品所需,把服务进行简单组合。
之前的数据层都是一个数据库承担很多服务,这次改造对数据库进行了拆分,比如一个数据库拆成了多个库或多个表,甚至增加独立的数据库,比如用户数据库是独立的数据库,画像数据放在HBase中。
服务之间的注册与发行使用Spring Cloud;前端的API Gateway基于Nginx服务路由;所有的应用部署在网易云的容器中,并基于容器实现DevOps。